home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 501-525 / disk_509 / multi_player / sources / pack.s < prev    next >
Text File  |  1992-05-06  |  10KB  |  621 lines

  1. ;*******************************
  2. ;*** NOISETRACKER COMPRESSED ***
  3. ;*** REPLAYROUTINE 1.3 D     ***
  4. ;*** IMPROVED ON 15/03/91    ***
  5. ;*** BY ANTICHRIST OF UFO    ***
  6. ;*******************************
  7.  
  8. ; This routine is fully pc-relative.
  9. ; Don't change anything in mt_vars
  10. ; ('coz the offsets below won't fit anymore!).
  11.  
  12. ; Include your PACKED module at mt_data (still the same!)
  13. ; To init, jump to Offset 0
  14. ; »» Load your start position to d0.l ««
  15. ; To play, jump to Offset 4
  16. ; To stop, jump to Offset 8
  17.  
  18. ; !!!!
  19.     XDEF    _pack_init,_pack_music,_pack_end
  20.     XREF    _adr_data
  21. ; !!!!
  22.  
  23.  
  24.  
  25. mt_speed    =0
  26. mt_songpos    =1
  27. mt_pattpos    =2
  28. mt_counter    =4
  29. mt_break    =5
  30. mt_dmacon    =6
  31. mt_samplestarts =8
  32. mt_voice1    =132
  33. mt_voice2    =166
  34. mt_voice3    =200
  35. mt_voice4    =234
  36.  
  37. _pack_init:
  38. ; !!!!
  39.     movem.l    d0-d7/a0-a6,-(a7)
  40. ; !!!!
  41.     move.l    d0,-(sp)
  42.     lea    mt_vars(pc),a4
  43.     move.l    _adr_data,a0
  44.     move.l    a0,a1
  45.     lea    $176(a1),a1
  46.     moveq    #$7f,d0
  47.     moveq    #0,d1
  48.     moveq    #0,d2
  49.  
  50. .seek    move.b    (a1)+,d1
  51.     cmp.b    d1,d2
  52.     bge.s    .nohi
  53.     move.b    d1,d2
  54. .nohi    dbf    d0,.seek
  55.  
  56.     move.l    _adr_data,(a0)
  57.     lea    $1f6(a0),a0
  58.     lea    mt_patterns(pc),a1
  59.     move.w    #$5041,d0
  60.     move.w    #$5454,d1
  61. .getPatt
  62.     cmp.w    (a0)+,d0
  63.     bne.s    .getPatt
  64.     cmp.w    (a0)+,d1
  65.     bne.s    .getPatt
  66.     move.l    a0,(a1)+
  67.     dbf    d2,.getPatt
  68.  
  69.     lea    mt_samplestarts(a4),a1
  70.     move.l    _adr_data,a2
  71.     move.l    a2,d2
  72.     moveq    #31-1,d1
  73. mt_lop3:
  74.     move.l    (a2),d0
  75.     add.l    d2,d0
  76.     move.l    d0,(a1)+
  77.     lea    12(a2),a2
  78.     dbf    d1,mt_lop3
  79.  
  80.     move.l    (sp)+,d0
  81.     moveq    #0,d0            ;insert this line, if you don't
  82.     bsr    setChannel        ;want to start your song at any 
  83.                     ;other position than 0
  84.     bset    #1,$bfe001
  85.     move.b    #6,mt_speed(a4)
  86.     clr.w    $dff0a8
  87.     clr.w    $dff0b8
  88.     clr.w    $dff0c8
  89.     clr.w    $dff0d8
  90.     clr.b    mt_counter(a4)
  91.     clr.w    mt_pattpos(a4)
  92.  
  93. ; !!!!
  94.     movem.l    (a7)+,d0-d7/a0-a6
  95. ; !!!!
  96.     rts
  97.  
  98. _pack_end:
  99.     clr.w    $dff0a8
  100.     clr.w    $dff0b8
  101.     clr.w    $dff0c8
  102.     clr.w    $dff0d8
  103.     move.w    #$f,$dff096
  104.     rts
  105. _pack_music:
  106. ; !!!!
  107.     movem.l    d0-d7/a0-a6,-(a7)
  108. ; !!!!
  109.     bsr    mt_music
  110. ; !!!!
  111.     movem.l    (a7)+,d0-d7/a0-a6
  112. ; !!!!
  113.     rts
  114.  
  115. mt_music:
  116.     lea    mt_vars(pc),a4
  117.     addq.b    #1,mt_counter(a4)
  118.     move.b    mt_counter(a4),D0
  119.     cmp.b    mt_speed(a4),D0
  120.     blt.s    mt_nonew
  121.     clr.b    mt_counter(a4)
  122.     bra    mt_getnew
  123.  
  124. mt_nonew:
  125.     lea    mt_voice1(a4),a6
  126.     lea    $dff0a0,a5
  127.     bsr    mt_checkcom
  128.     lea    mt_voice2(a4),a6
  129.     lea    $10(a5),a5
  130.     bsr    mt_checkcom
  131.     lea    mt_voice3(a4),a6
  132.     lea    $10(a5),a5
  133.     bsr    mt_checkcom
  134.     lea    mt_voice4(a4),a6
  135.     lea    $10(a5),a5
  136.     bsr    mt_checkcom
  137.     bra    mt_endr
  138.  
  139. mt_arpeggio:
  140.     moveq    #0,d0
  141.     move.b    mt_counter(a4),d0
  142.     divs    #3,d0
  143.     swap    d0
  144.     cmp.w    #0,d0
  145.     beq.s    mt_arp2
  146.     cmp.w    #2,d0
  147.     beq.s    mt_arp1
  148.  
  149.     moveq    #0,d0
  150.     move.b    3(a6),d0
  151.     lsr.b    #4,d0
  152.     bra.s    mt_arp3
  153. mt_arp1:
  154.     moveq    #0,d0
  155.     move.b    $3(a6),d0
  156.     and.b    #$f,d0
  157.     bra.s    mt_arp3
  158. mt_arp2:
  159.     move.w    $10(a6),d2
  160.     bra.s    mt_arp4
  161. mt_arp3:
  162.     asl.w    #1,d0
  163.     moveq    #0,d1
  164.     move.w    $10(a6),d1
  165.     lea    mt_periods(pc),a0
  166.     moveq    #$24,d7
  167. mt_arploop:
  168.     move.w    (a0,d0.w),d2
  169.     cmp.w    (a0),d1
  170.     bge.s    mt_arp4
  171.     addq.l    #2,a0
  172.     dbf    d7,mt_arploop
  173.     rts
  174. mt_arp4:move.w    d2,$6(a5)
  175.     rts
  176.  
  177. mt_getnew:
  178.     move.l    _adr_data,a3
  179.     clr.w    mt_dmacon(a4)
  180.     lea    $dff0a0,a5
  181.     lea    mt_voice1(a4),a6
  182.     bsr.s    mt_playvoice
  183.     lea    $10(a5),a5
  184.     lea    mt_voice2(a4),a6
  185.     bsr.s    mt_playvoice
  186.     lea    $10(a5),a5
  187.     lea    mt_voice3(a4),a6
  188.     bsr.s    mt_playvoice
  189.     lea    $10(a5),a5
  190.     lea    mt_voice4(a4),a6
  191.     bsr.s    mt_playvoice
  192.     bra    mt_setdma
  193.  
  194. mt_playvoice:
  195.     tst.w    32(a6)
  196.     beq.s    .nodelay
  197.     subq.w    #1,32(a6)
  198.     bra.s    .morevoice
  199. .nodelay
  200.     move.l    28(a6),a0
  201.     moveq    #0,d2
  202.     move.b    (a0),d2
  203.     cmpi.b    #$ff,d2
  204.     bne.s    .nocrunch
  205.     move.b    1(a0),33(a6)
  206.     addq.l    #2,28(a6)
  207.     clr.l    (a6)
  208.     bra.s    mt_playvoice
  209. .nocrunch
  210.     move.b    d2,d0
  211.     andi.b    #$3f,d2
  212.     beq.s    .noset
  213.     lsl.w    #1,d2
  214.     lea    mt_periods(pc),a1
  215.     move.w    -2(a1,d2.w),d2
  216. .noset    btst    #7,d0
  217.     beq.s    .nohisamp
  218.     bset    #12,d2
  219. .nohisamp
  220.     move.w    d2,(a6)
  221.     move.b    1(a0),2(a6)
  222.     clr.b    3(a6)
  223.     btst    #6,d0
  224.     bne.s    .nocom
  225.     move.b    2(a0),3(a6)
  226.     addq.l    #1,28(a6)
  227. .nocom    addq.l    #2,28(a6)
  228. .morevoice
  229.     moveq    #0,d2
  230.     move.b    2(a6),d2
  231.     and.b    #$f0,d2
  232.     lsr.b    #4,d2
  233.     move.b    (a6),d0
  234.     and.b    #$f0,d0
  235.     or.b    d0,d2
  236.     tst.b    d2
  237.     beq.s    mt_setregs
  238.     lea    mt_samplestarts(a4),a1
  239.     subq.l    #1,d2
  240.     move.l    d2,d4
  241.     mulu    #12,d4                
  242.     asl.l    #2,d2                
  243.     move.l    (a1,d2.l),4(a6)            
  244.     move.w    4(a3,d4.l),8(a6)        
  245.     move.w    6(a3,d4.l),18(a6)        
  246.     moveq    #0,d3
  247.     move.w    8(a3,d4.l),d3
  248.     tst.w    d3
  249.     beq.s    mt_noloop
  250.     move.l    4(a6),d2
  251.     lsl.l    #1,d3
  252.     add.l    d3,d2
  253.     move.l    d2,$a(a6)
  254.     move.w    8(a3,d4.l),d0
  255.     add.w    10(a3,d4.l),d0
  256.     move.w    d0,8(a6)
  257.     move.w    10(a3,d4.l),$e(a6)
  258.     move.w    $12(a6),$8(a5)
  259.     bra.s    mt_setregs
  260. mt_noloop:
  261.     move.l    4(a6),d2
  262.     add.l    d3,d2
  263.     move.l    d2,10(a6)
  264.     move.w    10(a3,d4.l),14(a6)
  265.     move.w    18(a6),8(a5)
  266. mt_setregs:
  267.     move.w    (a6),d0
  268.     andi.w    #$fff,d0
  269.     beq    mt_checkcom2
  270.     move.b    2(a6),d0
  271.     and.b    #$F,d0
  272.     cmp.b    #$3,d0
  273.     bne.s    mt_setperiod
  274.     bsr    mt_setmyport
  275.     bra    mt_checkcom2
  276.  
  277. mt_setperiod:
  278.     move.w    (a6),$10(a6)
  279.     and.w    #$fff,$10(a6)
  280.     move.w    $14(a6),d0
  281.     move.w    d0,$dff096
  282.     clr.b    $1b(a6)
  283.  
  284.     move.l    4(a6),(a5)
  285.     move.w    8(a6),4(a5)
  286.     move.w    $10(a6),d0
  287.     and.w    #$fff,d0
  288.     move.w    d0,$6(a5)
  289.     move.w    20(a6),d0
  290.     or.w    d0,mt_dmacon(a4)
  291.     bra    mt_checkcom2
  292.  
  293. mt_setdma:
  294.     move.w    #300,d0
  295. mt_wait:dbf    d0,mt_wait
  296.     move.w    mt_dmacon(a4),d0
  297.     or.w    #$8000,d0
  298.     move.w    d0,$dff096
  299.     move.w    #300,d0
  300. mt_wai2:dbf    d0,mt_wai2
  301.  
  302.     lea    $dff000,a5
  303.     lea    mt_voice4(a4),a6
  304.     move.l    $a(a6),$d0(a5)
  305.     move.w    $e(a6),$d4(a5)
  306.     lea    mt_voice3(a4),a6
  307.     move.l    $a(a6),$c0(a5)
  308.     move.w    $e(a6),$c4(a5)
  309.     lea    mt_voice2(a4),a6
  310.     move.l    $a(a6),$b0(a5)
  311.     move.w    $e(a6),$b4(a5)
  312.     lea    mt_voice1(a4),a6
  313.     move.l    $a(a6),$a0(a5)
  314.     move.w    $e(a6),$a4(a5)
  315.     addq.b    #1,mt_pattpos+1(a4)
  316.     cmpi.b    #64,mt_pattpos+1(a4)
  317.     bne.s    mt_endr
  318. mt_nex:    clr.b    mt_pattpos+1(a4)
  319.     clr.b    mt_break(a4)
  320.     addq.b    #1,mt_songpos(a4)
  321.     andi.b    #$7f,mt_songpos(a4)
  322.     move.l    a0,-(a7)
  323.     move.l    _adr_data,a0
  324.     move.b    mt_songpos(a4),d1
  325.     cmp.b    $174(a0),d1        
  326.     bne.s    .not
  327.     move.b    $175(a0),mt_songpos(a4)    
  328. .not    moveq    #0,d0
  329.     movem.l    (a7)+,a0
  330.     move.b    mt_songpos(a4),d0
  331.     bsr    setChannel
  332. mt_endr:
  333.     tst.b    mt_break(a4)
  334.     bne.s    mt_nex
  335.     rts
  336.  
  337. mt_setmyport:
  338.     move.w    (a6),d2
  339.     and.w    #$fff,d2
  340.     move.w    d2,$18(a6)
  341.     move.w    $10(a6),d0
  342.     clr.b    $16(a6)
  343.     cmp.w    d0,d2
  344.     beq.s    mt_clrport
  345.     bge.s    mt_rt
  346.     move.b    #$1,$16(a6)
  347.     rts
  348. mt_clrport:
  349.     clr.w    $18(a6)
  350. mt_rt:    rts
  351.  
  352. mt_myport:
  353.     move.b    3(a6),d0
  354.     beq.s    mt_myslide
  355.     move.b    d0,$17(a6)
  356.     clr.b    3(a6)
  357. mt_myslide:
  358.     tst.w    $18(a6)
  359.     beq.s    mt_rt
  360.     moveq    #0,d0
  361.     move.b    $17(a6),d0
  362.     tst.b    $16(a6)
  363.     bne.s    mt_mysub
  364.     add.w    d0,$10(a6)
  365.     move.w    $18(a6),d0
  366.     cmp.w    $10(a6),d0
  367.     bgt.s    mt_myok
  368.     move.w    $18(a6),$10(a6)
  369.     clr.w    $18(a6)
  370. mt_myok:move.w    $10(a6),$6(a5)
  371.     rts
  372. mt_mysub:
  373.     sub.w    d0,$10(a6)
  374.     move.w    $18(a6),d0
  375.     cmp.w    $10(a6),d0
  376.     blt.s    mt_myok
  377.     move.w    $18(a6),$10(a6)
  378.     clr.w    $18(a6)
  379.     move.w    $10(a6),$6(a5)
  380.     rts
  381.  
  382. mt_vib:    move.b    3(a6),d0
  383.     beq.s    mt_vi
  384.     move.b    d0,$1a(a6)
  385.  
  386. mt_vi:    move.b    $1b(a6),d0
  387.     lea    mt_sin(pc),a4
  388.     lsr.w    #$2,d0
  389.     and.w    #$1f,d0
  390.     moveq    #0,d2
  391.     move.b    (a4,d0.w),d2
  392.     move.b    $1a(a6),d0
  393.     and.w    #$f,d0
  394.     mulu    d0,d2
  395.     lsr.w    #$6,d2
  396.     move.w    $10(a6),d0
  397.     tst.b    $1b(a6)
  398.     bmi.s    mt_vibmin
  399.     add.w    d2,d0
  400.     bra.s    mt_vib2
  401. mt_vibmin:
  402.     sub.w    d2,d0
  403. mt_vib2:move.w    d0,$6(a5)
  404.     move.b    $1a(a6),d0
  405.     lsr.w    #$2,d0
  406.     and.w    #$3c,d0
  407.     add.b    d0,$1b(a6)
  408.     lea    mt_vars(pc),a4
  409.     rts
  410.  
  411. mt_nop:    move.w    $10(a6),$6(a5)
  412.     rts
  413.  
  414. mt_checkcom:
  415.     move.w    2(a6),d0
  416.     and.w    #$fff,d0
  417.     beq.s    mt_nop
  418.     move.b    2(a6),d0
  419.     and.b    #$f,d0
  420.     tst.b    d0
  421.     beq    mt_arpeggio
  422.     cmp.b    #$1,d0
  423.     beq.s    mt_portup
  424.     cmp.b    #$2,d0
  425.     beq    mt_portdown
  426.     cmp.b    #$3,d0
  427.     beq    mt_myport
  428.     cmp.b    #$4,d0
  429.     beq    mt_vib
  430.     move.w    $10(a6),$6(a5)
  431.     cmp.b    #$a,d0
  432.     beq.s    mt_volslide
  433.     rts
  434.  
  435. mt_volslide:
  436.     moveq    #0,d0
  437.     move.b    $3(a6),d0
  438.     lsr.b    #4,d0
  439.     tst.b    d0
  440.     beq.s    mt_voldown
  441.     add.w    d0,$12(a6)
  442.     cmp.w    #$40,$12(a6)
  443.     bmi.s    mt_vol2
  444.     move.w    #$40,$12(a6)
  445. mt_vol2:move.w    $12(a6),$8(a5)
  446.     rts
  447.  
  448. mt_voldown:
  449.     moveq    #0,d0
  450.     move.b    $3(a6),d0
  451.     and.b    #$f,d0
  452.     sub.w    d0,$12(a6)
  453.     bpl.s    mt_vol3
  454.     clr.w    $12(a6)
  455. mt_vol3:move.w    $12(a6),$8(a5)
  456.     rts
  457.  
  458. mt_portup:
  459.     moveq    #0,d0
  460.     move.b    3(a6),d0
  461.     sub.w    d0,$10(a6)
  462.     move.w    $10(a6),d0
  463.     and.w    #$fff,d0
  464.     cmp.w    #$71,d0
  465.     bpl.s    mt_por2
  466.     and.w    #$f000,$10(a6)
  467.     or.w    #$71,$10(a6)
  468. mt_por2:move.w    $10(a6),d0
  469.     and.w    #$fff,d0
  470.     move.w    d0,$6(a5)
  471.     rts
  472.  
  473. mt_portdown:
  474.     clr.w    d0
  475.     move.b    $3(a6),d0
  476.     add.w    d0,$10(a6)
  477.     move.w    $10(a6),d0
  478.     and.w    #$fff,d0
  479.     cmp.w    #$358,d0
  480.     bmi.s    mt_por3
  481.     and.w    #$f000,$10(a6)
  482.     or.w    #$358,$10(a6)
  483. mt_por3:move.w    $10(a6),d0
  484.     and.w    #$fff,d0
  485.     move.w    d0,$6(a5)
  486.     rts
  487.  
  488. mt_checkcom2:
  489.     move.b    2(a6),d0
  490.     and.b    #$f,d0
  491.     cmp.b    #$e,d0
  492.     beq.s    mt_setfilt
  493.     cmp.b    #$d,d0
  494.     beq.s    mt_pattbreak
  495.     cmp.b    #$b,d0
  496.     beq.s    mt_posjmp
  497.     cmp.b    #$c,d0
  498.     beq.s    mt_setvol
  499.     cmp.b    #$f,d0
  500.     beq.s    mt_setspeed
  501.     rts
  502.  
  503. mt_setfilt:
  504.     move.b    $3(a6),d0
  505.     and.b    #$1,d0
  506.     asl.b    #$1,d0
  507.     and.b    #$fd,$bfe001
  508.     or.b    d0,$bfe001
  509.     rts
  510. mt_posjmp:
  511.     move.b    3(a6),d0
  512.     subq.b    #1,d0
  513.     move.b    d0,mt_songpos(a4)
  514. mt_pattbreak:
  515.     not.b    mt_break(a4)
  516.     rts
  517. mt_setvol:
  518.     cmp.b    #$40,$3(a6)
  519.     ble.s    mt_vol4
  520.     move.b    #$40,$3(a6)
  521. mt_vol4:
  522.     move.b    $3(a6),$8(a5)
  523.     rts
  524.  
  525. mt_setspeed:
  526.     cmp.b    #$1f,$3(a6)
  527.     ble.s    mt_sets
  528.     move.b    #$1f,$3(a6)
  529. mt_sets:
  530.     move.b    $3(a6),d0
  531.     beq.s    mt_rts2
  532.     move.b    d0,mt_speed(a4)
  533.     clr.b    mt_counter(a4)
  534. mt_rts2:
  535.     rts
  536.  
  537. setChannel:
  538.     move.l    _adr_data,a0
  539.     lea    mt_vars(pc),a4
  540.     cmp.b    $174(a0),d0
  541.     blt.s    .valid
  542.     moveq    #0,d0
  543. .valid    move.b    d0,mt_songpos(a4)
  544.     lea    $176(a0),a0
  545.     move.b    (a0,d0.w),d0
  546.     lsl.l    #2,d0
  547.     lea    mt_voice1(a4),a1
  548.     lea    mt_patterns(pc),a0
  549.     move.l    (a0,d0.w),a0
  550.     move.l    a0,d2
  551.     move.l    d2,d0
  552.     addq.l    #6,d0
  553.     moveq    #3,d1
  554.     bra.s    .dochan
  555. .setchannel
  556.     lea    34(a1),a1
  557.     moveq    #0,d0
  558.     move.w    (a0)+,d0
  559.     add.l    d2,d0
  560. .dochan
  561.     move.l    d0,28(a1)
  562.     clr.w    32(a1)
  563.     dbf    d1,.setchannel
  564.     rts
  565.  
  566. mt_sin:
  567.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  568.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  569.  
  570. mt_periods:
  571.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  572.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  573.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  574.  DC.w $007f,$0078,$0071
  575.  
  576. mt_patterns:
  577.     dcb.l    64
  578. mt_vars:            ;*** DON'T CHANGE ANYTHING BELOW ***
  579.     DC.b    6
  580.     DC.b    0
  581.     DC.w    0
  582.     DC.b    0
  583.     DC.b    0
  584.     DC.w    0
  585. ;mt_samplestarts
  586.     dcb.L    $1f
  587.  
  588. ;mt_voice1
  589.     dcb.w    10
  590.     DC.w    1
  591.     dcb.w    3
  592.     dc.l    0        
  593.     dc.w    0        
  594.  
  595. ;mt_voice2
  596.     dcb.w    10
  597.     DC.w    2
  598.     dcb.w    3
  599.     dc.l    0
  600.     dc.w    0
  601.     
  602. ;mt_voice3
  603.     dcb.w    10
  604.     DC.w    4
  605.     dcb.w    3
  606.     dc.l    0
  607.     dc.w    0
  608.     
  609. ;mt_voice4
  610.     dcb.w    10
  611.     DC.w    8
  612.     dcb.w    3
  613.     dc.l    0
  614.     dc.w    0
  615.  
  616. ;atdp Coke's Touchdown !
  617.  
  618.  
  619.  
  620.  
  621.